// 引入axios
import axios from 'axios'
// 引入ElementPlus的消息提示组件
import { ElMessage } from 'element-plus'
// 引入用户小仓库
import useUserStore from '../store/modules/user'
// 创建axios实例
const baseURL = import.meta.env.VITE_APP_BASE_API // 使用Node.js环境变量

// 第一步
const request = axios.create({
  // axiso的create方法会创建一个axios实例 可用于设置一些基础属性（默认路由头、超时时间...）
  baseURL: baseURL, // 设置基础URL
  timeout: 5000, // 设置请求超时时间为10秒
})

// 第二步:request实例添加请求与响应拦截器
// 请求拦截器
request.interceptors.request.use((config) => {
  // 获取用户相关小仓库，获取token,登录成功之后携带给服务器
  const userStore = useUserStore()

  if (userStore.token) {
    config.headers.token = userStore.token
  }
  // config配置对象，headers请求头，经常给服务器携带公共参数
  // 返回配置对象
  return config // 返回配置对象
})

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 成功的回调
    // 简化数据
    return response.data // 假设后端返回的数据结构是 { data: { ... } }
  },
  (error) => {
    let staus = error.response.status // 获取错误状态码
    let message = ''
    switch (staus) {
      case 401:
        message = '未授权，请登录'
        break
      case 403:
        message = '禁止访问'
        break
      case 404:
        message = '请求地址未找到'
        break
      case 500:
        message = '服务器内部错误'
        break
      default:
        message = '请求失败，请稍后再试'
        break
    }
    // 处理错误
    ElMessage({
      type: 'error',
      message,
    })
    return Promise.reject(error) // 返回一个被拒绝的Promise
  },
)
export default request // 导出request以便其他地方使用
